什么是 SSH?SSH,或 Secure Shell,是一種網(wǎng)絡(luò)協(xié)議,允許用戶通過(guò) Internet 遠(yuǎn)程管理他們的服務(wù)器或計(jì)算機(jī),其中兩臺(tái)機(jī)器之間的通信被高度加密并防止被竊聽(tīng)。用戶在他或她的機(jī)器上運(yùn)行客戶端,網(wǎng)絡(luò)連接將用戶的擊鍵和命令從用戶的本地機(jī)器傳送到遠(yuǎn)程服務(wù)器。然后網(wǎng)絡(luò)連接將服務(wù)器的響應(yīng)傳回給用戶。
與使用不受保護(hù)的網(wǎng)絡(luò)協(xié)議(如 telnet 和 rlogin)遠(yuǎn)程管理計(jì)算機(jī)的舊方法相比,SSH 提供了一種安全的替代方法,可以替代不安全的網(wǎng)絡(luò)連接(如 Internet)。如今,SSH 在大多數(shù)(如果不是全部)服務(wù)器中都有提供。
用戶可以通過(guò)運(yùn)行 PuTTY 客戶端、終端、Bash 或任何其他客戶端,通過(guò) SSH 輸入用戶名和密碼來(lái)連接到遠(yuǎn)程服務(wù)器。然而,還有一個(gè)比每次連接到遠(yuǎn)程服務(wù)器時(shí)都輸入密碼更安全、更簡(jiǎn)單的選擇,即在所述 SSH 服務(wù)器上使用 SSH 公鑰進(jìn)行身份驗(yàn)證。
什么是 SSH 公鑰身份驗(yàn)證以及它們?nèi)绾喂ぷ鳎?/p>
SSH 服務(wù)器可以通過(guò)多種方式對(duì)用戶進(jìn)行身份驗(yàn)證,其中最常用的方法是通過(guò)密碼和公鑰身份驗(yàn)證。
通常,用戶如何安全地連接到他們的服務(wù)器是打開(kāi) PuTTY/Terminal/Bash 并通過(guò)使用 GUI 登錄或在終端中鍵入 ssh username@IPAddress 來(lái)啟動(dòng) SSH 連接,然后繼續(xù)輸入密碼提示時(shí)。
但是,當(dāng)您想登錄到遠(yuǎn)程服務(wù)器時(shí),不是在 PuTTY/Terminal 客戶端中鍵入密碼,而是另一種安全身份驗(yàn)證的方法是使用 SSH 公鑰進(jìn)行身份驗(yàn)證,這是在不鍵入密碼的情況下進(jìn)行身份驗(yàn)證。
SSH 密鑰身份驗(yàn)證成對(duì)工作:私鑰和公鑰。與對(duì)稱加密(加密和解密使用相同的密鑰)不同,SSH 密鑰認(rèn)證采用非對(duì)稱加密算法,加密和解密使用不同的密鑰。
用戶(或授權(quán)人)需要生成私鑰和公鑰。私鑰必須安全保密,不得與任何其他人共享。如果私鑰被泄露,它幾乎就像消失了一樣,因?yàn)閻阂庥脩艨赡軙?huì)使用私鑰訪問(wèn)遠(yuǎn)程服務(wù)器,而且如果私鑰不受任何密碼保護(hù)。
與私鑰一起生成的公鑰可以與任何服務(wù)器共享。然后使用SSH協(xié)議將公鑰上傳到用戶要登錄的遠(yuǎn)程服務(wù)器。因此,關(guān)系也可能是這樣的;一把私鑰對(duì)一把公鑰放置在許多服務(wù)器中。
另一個(gè)有權(quán)訪問(wèn)公鑰的人并不意味著他/她可以解密消息。只有擁有私鑰的用戶才能解密消息。公鑰僅用作加密消息的一種方式,消息只能由擁有私鑰的人解密。可以肯定地說(shuō),私鑰不能從公鑰中導(dǎo)出。因此,公鑰無(wú)法解密它發(fā)出的消息,甚至無(wú)法解密私鑰加密的消息。
因此,如果用戶使用 SSH 密鑰進(jìn)行身份驗(yàn)證(而不是手動(dòng)輸入密碼),服務(wù)器將向用戶發(fā)送加密的質(zhì)詢語(yǔ)句,然后用戶將使用私鑰解密消息,然后將其發(fā)送回遠(yuǎn)程服務(wù)器進(jìn)行檢查。然后服務(wù)器將驗(yàn)證消息是否被正確解密,如果它與之前的質(zhì)詢語(yǔ)句匹配,則客戶端通過(guò)身份驗(yàn)證。
基本上,遠(yuǎn)程 SSH 服務(wù)器正在測(cè)試客戶端是否具有與該遠(yuǎn)程服務(wù)器上的公鑰相關(guān)聯(lián)的正確私鑰。如果客戶端能夠證明它擁有正確的私鑰,那么客戶端就通過(guò)了身份驗(yàn)證。
為什么使用 SSH 密鑰而不是密碼進(jìn)行身份驗(yàn)證?
不可否認(rèn),使用 SSH 公鑰進(jìn)行身份驗(yàn)證比使用密碼進(jìn)行身份驗(yàn)證的主要優(yōu)勢(shì)在于安全性。無(wú)論密碼有多長(zhǎng)或多復(fù)雜,它永遠(yuǎn)不能等同于 SSH 公鑰提供的加密強(qiáng)度。密碼容易受到惡意用戶的暴力攻擊,或者更糟的是,密碼甚至可以被知道可用于找回密碼的用戶個(gè)人信息的人猜測(cè)。
此外,使用 SSH 公鑰還可以消除用戶必須記住或?qū)懴聫?fù)雜密碼的需要。如果用戶需要多次訪問(wèn)遠(yuǎn)程服務(wù)器而無(wú)需在每次登錄時(shí)(或會(huì)話因空閑時(shí)間斷開(kāi)連接時(shí))多次輸入密碼,公鑰身份驗(yàn)證還允許非交互式登錄,因?yàn)橐约白詣?dòng)化需要來(lái)自遠(yuǎn)程機(jī)器的身份驗(yàn)證的過(guò)程。
最佳實(shí)踐
但是,如果私鑰沒(méi)有保存在安全的地方,那么上述所有優(yōu)點(diǎn)都毫無(wú)意義。為了提高安全性,建議將私鑰存儲(chǔ)在智能卡或 USB 令牌等加密設(shè)備上,而不是將私鑰存儲(chǔ)在硬盤(pán)上,這樣如果未經(jīng)授權(quán)的用戶惡意用戶無(wú)法訪問(wèn)它獲得對(duì)計(jì)算機(jī)的訪問(wèn)權(quán)限。此外,可以使用密碼加密私鑰。但這僅適用于交互式登錄(對(duì)于非自動(dòng)化任務(wù)),因?yàn)樗赡苄枰粋€(gè)人輸入密碼才能使用私鑰。
由于創(chuàng)建一對(duì) SSH 密鑰需要最少的工作,通常情況下,不必要地生成或重新生成密鑰(在許多情況下,自行配置)只是為了解決小問(wèn)題。如果任其發(fā)展,這可能會(huì)導(dǎo)致無(wú)法管理的混亂,其中有許多公鑰卻不知道它們與誰(shuí)相關(guān)聯(lián),也不知道該人是否仍被授權(quán)訪問(wèn)服務(wù)器。